package exception02;

import java.io.IOException;
import java.util.zip.DataFormatException;

/**
 * try...catch注意事项
 *  1.如果多个catch中的异常类型没有父子关系,那么多个catch的顺序不影响最终结果
 *  2.如果多个catch中的异常类型有父子关系,那么父类型的catch不能放在子类型的上面
 *    因为无论子类型异常对象,还是父类型的异常对象都会被父类型的catch捕获,那么在父类型catch下面的子类型catch将永远执行不到
 *   解决方案:
 *     将子类型的catch放在父类型的catch上方
 */
public class ExceptionDemo07 {
    public static void main(String[] args) {
        method01();
        try {
            //method(0);
            method(2);
        } catch (IOException e) { //method(0)抛出new IOException(),被catch(IOException e)捕获
            System.out.println("捕获了IOException");
        }  catch (Exception e) {//method(2)抛出new Exception(),由于catch (IOException e)无法接收new Exception()
                                //也就无法处理,因此new Exception()会找catch (Exception e)处理

            System.out.println("捕获了DataFormatException");
        }
    }
    public static void method(int a)throws IOException,Exception {
        if (a == 0) {
            //抛出一个编译时异常
            throw new IOException();
        }
        if (a == 2) {
            //throw new DataFormatException();
            throw new Exception();
        }
    }
    private static void method01() {
       /* try {
            //method(0);
            method(2);
        } catch (Exception e) { //method(0)抛出new IOException(),我们也可以被 catch(Exception e)捕获
                                 //相当于 Exception e = new IOException(); 多态
                                 //method(2)抛出new Exception,也被catch(Exception e)捕获
                                 //相当于Exception e = new Exception();
            System.out.println("捕获了DataFormatException");
        }catch (IOException e) {
            System.out.println("捕获了IOException");
        }*/
    }


}
